import createElement from './createElement.js'
import updateChildren from './updateChildren.js'
// 对比是否是同一个虚拟节点
export default function patchVnode (oldVnode, newVnode) {
	// 判断新旧vnode是否是同一个对象(===表示内存中相等)
	if (oldVnode === newVnode) {
		return
	}
	// 判断vnode有没有text属性
	if (newVnode.text !== undefined && (newVnode.children === undefined || newVnode.children.length === 0)) {
		// 新vnode有text属性
		console.log('进来了')
		if (newVnode.text !== oldVnode.text) {
			// 如果新虚拟节点text与旧虚拟节点text不同，那么直接让新的text写入旧的elm中即可
			// 如果老虚拟节点中有children也会因为innerText消失
			oldVnode.elm.innerText = newVnode.text
		}
	} else {
		// 新vnode没有text属性
		// 判断老节点有没有children
		if (oldVnode.children !== undefined && oldVnode.children.length > 0) {
			// 老的有children，此时就是最复杂情况，新老都有children
			updateChildren(oldVnode.elm, oldVnode.children, newVnode.children)
		} else {
			// 老的没有children，新的有children
			// 清空老节点的内容
			oldVnode.elm.innerHTML = ''
			// 遍历新的vnode的子节点，创建DOM，上树
			for (let i = 0; i < newVnode.children.length; i++) {
				let dom = createElement(newVnode.children[i])
				oldVnode.elm.appendChild(dom)
			}
		}
	}
}